#!/bin/bash

#./lib/install2.sh
# http://hzvault.hackerzvoice.net
# script d'installation d'hzvault
# ce script est lance apres le chroot du script install.sh

# recuperation des valeurs par defaut definies dans le script install.sh
KEYPATH=$1
VERB=$2
VERSION_DEBIAN=$3
DEFAULT_NOT_VERBOSE_OUTPUT=$4
DEFAULT_VERBOSE_OUTPUT=$5
DEFAULT_APT_PROXY_DIR=$6
APT_PROXY="http://localhost:3142/debian"
CRYPTO=$7
VIRT=$8
APT_PROXY=$9


export LANGUAGE="fr_FR.UTF-8"
export LANG="fr_FR.UTF-8"
export LC_ALL="fr_FR.UTF-8"
export DEBIAN_FRONTEND="noninteractive"
# suite du montage des partitions
mount -t sysfs sys /sys
mount -t proc proc /proc
mount -t devpts devpts /dev/pts

# taille de la clef
KEYSIZE=$(fdisk -l $KEYPATH | grep $KEYPATH: | cut -f 5 -d ' ')

# Modification du fichier /etc/network/interfaces
rm /etc/network/interfaces
cp /tmp/lib/interfaces /etc/network/interfaces

# bug i915
echo "blacklist vesafb" >> /etc/modprobe.d/blacklist.conf 

# Copie du uplash.conf
cp /tmp/lib/usplash.conf /etc/

# Modification du fichier /etc/apt/sources.list
echo "deb http://http.us.debian.org/debian $VERSION_DEBIAN main contrib non-free" > /etc/apt/sources.list
echo "deb http://security.debian.org $VERSION_DEBIAN/updates main contrib non-free" >> /etc/apt/sources.list

# redefinition de locales
#echo "installation de la langue d'affichage (locales)"
#echo "sélectionnez \"fr_FR.UTF8\" dans le menu qui suit. (appuyez sur ENTREE pour continuer)."
#echo "évitez de choisir \"all locales\": l'installation prend du temps et votre clef risque d'etre trop petite!"
#echo "appuyez sur enter pour continuer..."
#read waiting
locale-gen fr_FR fr_FR.UTF-8 > $VERB
dpkg-reconfigure locales > $VERB

# Creation du fstab
 
# Suppression du fichier /etc/fstab existant
rm /etc/fstab > $VERB

# copie le futur fichier fstab de /tmp vers /etc et modifier l'UUID correspondant: 
cp /tmp/lib/fstab /etc > $VERB
sed -i "s/AAAAA/$(blkid -o value ${KEYPATH}1 | head -n 1)/" /etc/fstab > $VERB

# copie le script de demarrage du hzvault
[ $VIRT -eq "1" ] && cp /tmp/lib/hzvirt.sh /etc/init.d > $VERB
[ $CRYPTO -eq "1" ] && cp /tmp/lib/hzvault.sh /etc/init.d > $VERB
[ $CRYPTO -eq "1" ] && sed -i "s/AAAAA/$(blkid -o value ${KEYPATH}3 | head -n 1)/" /etc/init.d/hzvault.sh > $VERB

# Ajout du script de demarrage au boot de la machine
[ $CRYPTO -eq "1" ] && chmod +x /etc/init.d/hzvault.sh
[ $VIRT -eq "1" ] && chmod +x /etc/init.d/hzvirt.sh
###########################################
# essai sans le script init
#########################################
#[ $CRYPTO -eq "1" ] && update-rc.d hzvault.sh defaults 10
#pas la peine de lancer hzvirt si on a la crypto : dans ce cas c'est hzvault.sh qui lance hzvirt
#[ $VIRT -eq "1" ] && [ $CRYPTO -ne "1" ] && update-rc.d hzvirt.sh defaults  11
update-rc.d hzvirt.sh defaults  11

# suppression de l'ancien fichier /etc/initramfs-tools/modules
rm /etc/initramfs-tools/modules > $VERB

# copie du fichier
cp /tmp/lib/modules /etc/initramfs-tools > $VERB
cp /tmp/lib/lvm2 /usr/share/initramfs-tools/scripts/local-top/lvm2

##################################
# patch 
####################################"
#echo "patch -p0 < /tmp/lib/lvm2_wait-lvm.patch"
#read stop

# ajoute le disque 2 dans /etc/crypttab
if [ $VIRT -eq "1" ] ; then
    TEMP=$(blkid -o value ${KEYPATH}2 | head -n 1)
    echo "# <target name> <source device> <key file> <options>" >> /etc/crypttab
    echo "pvhzvault /dev/disk/by-uuid/$TEMP none cipher=aes-cbc-essiv:sha256,loud,luks,retry=1" > /etc/crypttab

# integration des scripts cryptroot dans le initramfs
    cp /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks/ > $VERB
    cp /usr/share/initramfs-tools/scripts/local-top/cryptroot /etc/initramfs-tools/scripts/local-top/ > $VERB
fi

# creation du fichier hostname et modification du fichier hosts

# fonction test caracteres alphanumeriques de nom de la machine
while true
do
  echo "quel nom voulez vous donner à votre machine? [hzvault]"
  read NAME
  # test si reponse vide. Si oui, choisit la valeur par defaut
  [ -z $NAME ] && NAME="hzvault" && break
  #TEMP="$(echo $NAME | sed -e 's/[^[:alnum:]]//g')"
  #[ "$TEMP" != "$NAME" ] || break
done

# Création du fichier hostname
echo "$NAME" > /etc/hostname

# Modification du fichier hosts
echo "127.0.0.1 localhost.localdomain localhost $NAME" > /etc/hosts
echo "::1     localhost ip6-localhost ip6-loopback" >> /etc/hosts
echo "fe00::0 ip6-localnet" >> /etc/hosts
echo "ff00::0 ip6-mcastprefix" >> /etc/hosts
echo "ff02::1 ip6-allnodes" >> /etc/hosts
echo "ff02::2 ip6-allrouters" >> /etc/hosts
echo "ff02::3 ip6-allhosts" >> /etc/hosts

# sans installation du theme usplash
#cp /tmp/lib/hzv-usplash.so /usr/lib/usplash > $VERB
#update-alternatives --install /usr/lib/usplash/usplash-artwork.so usplash-artwork.so /usr/lib/usplash/hzv-usplash.so 60 > $VERB
#update-alternatives --config usplash-artwork.so > $VERB
# * Sélectionner le thème hzv-usplash

[ $VIRT -eq "1" ] && cp -pr /tmp/lib/hzvirt/ /usr/share/hzvirt/

# mise à jour cache apt pour notre version debian
apt-get update > $VERB

#echo "Installation du kernel et des dépendances supplémentaires"
#echo "Durant l'installation:"
#echo "- un message d'avertissement pour l'installation du kernel vous sera soumis."
#echo "  Il vous demande si vous ne souhaitez PAS installer un nouveau noyau. Repondre NON !!!!"
#echo "- le choix du clavier sera proposé. Attention, par défaut: qwerty."
#echo "  Modifier ce choix si vous souhaitez utiliser un clavier azerty."
#echo "Appuyer sur enter pour continuer ..."
#read waiting

# la compilation du module virtualbox fail. C'est normal car nous ne connaissons
# pas encore la version du noyau. Nous telechargerons les linux-headers peu apres...

#Apt cleaning
apt-get install -y -f

#installation du kernel
apt-get -y --allow-unauthenticated install linux-image-686

# installation virtualbox-ose
[ $VIRT -eq "1" ] && apt-get -y --allow-unauthenticated install virtualbox-ose virtualbox-ose-dkms

# installation de console-data. Choix du clavier: fr-pc conseillé
apt-get -y --allow-unauthenticated install console-data xorg
install-keymap fr
# telechargement des linux-headers pour notre noyau.
#[ $VIRT = "1" ] && apt-get -y --allow-unauthenticated install linux-headers-$(ls /boot | grep vmlinuz | cut -f 2,3,4 -d '-') 

# mise en place de initramfs
update-initramfs -u > $VERB

# Installation de grub
while true; do
  ( apt-get -y --allow-unauthenticated install grub2 > $VERB ) && break
done
grub-install ${KEYPATH} > $VERB

# Modification du fichier /boot/grub/grub.cfg
# attention le grub.cfg.old garde des infos sur la machine sur laquelle s'est faite la creation de la clef
cp /boot/grub/grub.cfg /boot/grub/grub.cfg.old
rm /boot/grub/grub.cfg

if [ $CRYPTO = "1" ]
then
cp /tmp/lib/grub.cfg /boot/grub/grub.cfg
else
cp /tmp/lib/grub2.cfg /boot/grub/grub.cfg
fi
sed -i "s/AAAAA/$(blkid -o value ${KEYPATH}1 | head -n 1)/" /boot/grub/grub.cfg > $VERB
sed -i "s/BBBBB/$(blkid -o value /dev/mapper/vghzvault-rootfs | head -n 1)/" /boot/grub/grub.cfg > $VERB
sed -i "s/CCCCC/$(ls /boot | grep vmlinuz | cut -f 2,3,4 -d '-')/" /boot/grub/grub.cfg > $VERB

###################################
# installation de virtualbox
#TODO passer en mandatory (option ligne de commande)
#while true; do
#  ( apt-get -y --allow-unauthenticated install virtualbox-ose virtualbox-ose-qt ) && break
#done

# Création du dossier des Documents
mkdir /home/data > $VERB

# Modifier le MDP root 
while true; do
  echo "Modification du mot de passe root"
  ( passwd ) && break
done

# Creation du dossier HZVAULT et génération du checksum du bootloader
mkdir /etc/hzvault
dd if=${KEYPATH}1 bs=512 | sha1sum > /etc/hzvault/hzvault-bootloader.sum > $VERB

# Copie des tools

# Decompresser l'ensemble des fichiers contenus dans le fichier Drive_4.zip
while true; do
  ( apt-get -y --allow-unauthenticated install unzip > $VERB ) && break
done

unzip /tmp/lib/Drive_4.zip -d /tools > $VERB

# nettoyage cache apt
apt-get -y clean > $VERB
